package com.example.project.service;

import java.util.List;

import com.example.project.entity.Watcher;

/**
 * 用户关注Service接口
 * 
 * @author ruoyi
 * @date 2025-11-06
 */
public interface WatcherService {

	/**
	 * 查询用户关注
	 * 
	 * @param id 用户关注主键
	 * @return 用户关注
	 */
	public Watcher selectWatcherById(Long id);

	/**
	 * 查询用户关注列表
	 * 
	 * @param watcher 用户关注
	 * @return 用户关注集合
	 */
	public List<Watcher> selectWatcherList(Watcher watcher);

	/**
	 * 新增用户关注
	 * 
	 * @param watcher 用户关注
	 * @return 结果
	 */
	public int insertWatcher(Watcher watcher);

	/**
	 * 修改用户关注
	 * 
	 * @param watcher 用户关注
	 * @return 结果
	 */
	public int updateWatcher(Watcher watcher);

	/**
	 * 批量删除用户关注
	 * 
	 * @param ids 需要删除的用户关注主键集合
	 * @return 结果
	 */
	public int deleteWatcherByIds(String ids);

	/**
	 * 删除用户关注信息
	 * 
	 * @param id 用户关注主键
	 * @return 结果
	 */
	public int deleteWatcherById(Long id);
	
	/**
	 * 关注某个对象
	 * 
	 * @param watchableType 被关注对象类型
	 * @param watchableId 被关注对象ID
	 * @param userId 用户ID
	 * @return 结果
	 */
	public boolean watch(String watchableType, Long watchableId, Long userId);
	
	/**
	 * 取消关注某个对象
	 * 
	 * @param watchableType 被关注对象类型
	 * @param watchableId 被关注对象ID
	 * @param userId 用户ID
	 * @return 结果
	 */
	public boolean unwatch(String watchableType, Long watchableId, Long userId);
	
	/**
	 * 检查用户是否关注了某个对象
	 * 
	 * @param watchableType 被关注对象类型
	 * @param watchableId 被关注对象ID
	 * @param userId 用户ID
	 * @return 是否关注
	 */
	public boolean isWatched(String watchableType, Long watchableId, Long userId);
	
	/**
	 * 获取某个对象的关注者列表
	 * 
	 * @param watchableType 被关注对象类型
	 * @param watchableId 被关注对象ID
	 * @return 关注者列表
	 */
	public List<Watcher> getWatchers(String watchableType, Long watchableId);
	
	/**
	 * 获取某个对象的关注者数量
	 * 
	 * @param watchableType 被关注对象类型
	 * @param watchableId 被关注对象ID
	 * @return 关注者数量
	 */
	public int getWatcherCount(String watchableType, Long watchableId);

}
